Django টেমপ্লেট সিস্টেমে Template Filters এমন ফাংশন যা টেমপ্লেটের মধ্যে ডাটা প্রদর্শন করার সময় আউটপুট পরিবর্তন বা ফরম্যাট করতে ব্যবহৃত হয়। টেমপ্লেট ফিল্টারগুলি সাধারণত একটি পাইপ | চিহ্নের মাধ্যমে টেমপ্লেটের মধ্যে প্রয়োগ করা হয়। Django অনেক বিল্ট-ইন ফিল্টার প্রদান করে, কিন্তু প্রয়োজনে আপনি Custom Template Filters তৈরি করতে পারেন।
Template Filters
Django-তে Template Filters হল সরল ফাংশন যেগুলি আপনার ডাটা বা ভেরিয়েবলকে নির্দিষ্ট আকারে প্রদর্শন করতে ব্যবহৃত হয়। Django বিভিন্ন প্রকারের বিল্ট-ইন টেমপ্লেট ফিল্টার সরবরাহ করে যা আপনি টেমপ্লেটে ব্যবহার করতে পারেন।
১. কিছু সাধারণ Built-in Template Filters
datefilter: এটি একটি তারিখ বা সময় ফরম্যাট করার জন্য ব্যবহৃত হয়।উদাহরণ:
{{ post.date_published|date:"F j, Y" }}এখানে
dateফিল্টার তারিখকেMonth Day, Yearফরম্যাটে প্রদর্শন করবে। যেমন:October 5, 2024lowerfilter: এটি একটি স্ট্রিংকে ছোট অক্ষরে পরিণত করে।উদাহরণ:
{{ user.name|lower }}যদি
user.name"John" হয়, তাহলে এটি "john" প্রদর্শন করবে।defaultfilter: এটি কোনো ভেরিয়েবল যদিNoneবাFalseহয়, তবে ডিফল্ট মান প্রদান করে।উদাহরণ:
{{ user.profile_picture|default:"/static/images/default.jpg" }}যদি
user.profile_picturenull বাNoneহয়, তবে/static/images/default.jpgচিত্র প্রদর্শিত হবে।lengthfilter: এটি একটি লিস্ট বা স্ট্রিং-এর দৈর্ঘ্য প্রদান করে।উদাহরণ:
{{ my_list|length }}এটি
my_list-এর উপাদানের সংখ্যা প্রদর্শন করবে।joinfilter: এটি একটি তালিকার উপাদানগুলো একটি নির্দিষ্ট স্ট্রিং দিয়ে যোগ করে।উদাহরণ:
{{ my_list|join:", " }}এটি তালিকার উপাদানগুলো কমা দিয়ে যোগ করবে, যেমন:
item1, item2, item3।
২. ফিল্টার ব্যবহারের উদাহরণ
ধরা যাক, আপনি একটি ব্লগ পোস্টের তৈরি তারিখ এবং পোস্টের বিষয়বস্তু প্রদর্শন করতে চান। তাহলে আপনি নিম্নলিখিতভাবে টেমপ্লেট লিখতে পারেন:
<p>Post published on: {{ post.date_published|date:"F j, Y" }}</p>
<p>{{ post.content|truncatewords:30 }}</p>
এখানে:
dateফিল্টার তারিখকে উপযুক্ত ফরম্যাটে প্রদর্শন করবে।truncatewordsফিল্টার পোস্টের কনটেন্টকে ৩০ শব্দে সংকুচিত করবে।
Custom Template Filters
Django-তে আপনি Custom Template Filters তৈরি করতে পারেন যেগুলি আপনার প্রয়োজন অনুযায়ী ডেটা পরিবর্তন করবে। এটি করার জন্য আপনাকে একটি custom filters module তৈরি করতে হবে এবং সেখানে একটি ফিল্টার ফাংশন ডিফাইন করতে হবে।
১. Custom Filter তৈরি করা
ধরা যাক, আপনি একটি ফিল্টার তৈরি করতে চান যা একটি স্ট্রিং-এর প্রথম অক্ষরকে বড় করে দিবে।
- প্রথমে আপনার অ্যাপের templatetags ফোল্ডারে একটি Python ফাইল তৈরি করুন, যেমন
custom_filters.py। - সেখানে একটি ফিল্টার ফাংশন লিখুন:
# templatetags/custom_filters.py
from django import template
register = template.Library()
@register.filter(name='capitalize_first')
def capitalize_first(value):
if isinstance(value, str):
return value.capitalize()
return value
এখানে:
register.filterডেকোরেটরটি এই ফাংশনটিকে একটি টেমপ্লেট ফিল্টার হিসেবে নিবন্ধন করবে।capitalize_firstফিল্টারটি স্ট্রিংয়ের প্রথম অক্ষর বড় করবে।
২. Custom Filter ব্যবহার করা
এখন, টেমপ্লেট ফাইলে এই ফিল্টার ব্যবহার করতে হলে আপনাকে প্রথমে {% load %} ট্যাগ দিয়ে ফিল্টারটি লোড করতে হবে:
{% load custom_filters %}
<p>{{ user.name|capitalize_first }}</p>
এখানে, যদি user.name হয় "john", তাহলে এটি "John" প্রদর্শন করবে।
৩. Complex Custom Filter উদাহরণ
ধরা যাক, আপনি একটি ফিল্টার তৈরি করতে চান যা একটি লিস্টের সব স্ট্রিংয়ের প্রথম অক্ষর বড় করবে।
# templatetags/custom_filters.py
from django import template
register = template.Library()
@register.filter(name='capitalize_all')
def capitalize_all(value):
if isinstance(value, list):
return [item.capitalize() for item in value if isinstance(item, str)]
return value
এখানে:
- যদি
valueএকটি লিস্ট হয়, তবে এটি প্রতিটি স্ট্রিংয়ের প্রথম অক্ষর বড় করে দেবে।
৪. Custom Filter ব্যবহার করা
{% load custom_filters %}
<ul>
{% for item in my_list %}
<li>{{ item|capitalize_all }}</li>
{% endfor %}
</ul>
এটি লিস্টের সমস্ত স্ট্রিংয়ের প্রথম অক্ষর বড় করে প্রদর্শন করবে।
সারাংশ
- Template Filters Django-তে ডাটা প্রক্রিয়া করার একটি শক্তিশালী টুল। Django অনেক বিল্ট-ইন ফিল্টার প্রদান করে, যেমন
date,lower,lengthইত্যাদি। - Custom Filters তৈরি করা যায় যদি আপনার প্রোজেক্টের জন্য কাস্টম ফিল্টার প্রয়োজন হয়। আপনি আপনার নিজস্ব কাস্টম ফিল্টার তৈরি করতে
templatetagsমডিউল ব্যবহার করে। - Custom Filters তৈরি করার জন্য
register.filterডেকোরেটর ব্যবহার করা হয়, এবং আপনি এই ফিল্টারগুলি টেমপ্লেটে{% load %}ট্যাগ দিয়ে লোড করতে পারেন।
Read more